/**
    * request.js
    * 封装一个Promise风格的通用请求
    * url - 请求地址
    * option - 包含请求方式、请求参数的配置对象
*/
const app = getApp<IAppOption>() //引入全局app.js，我们可以在globalData中定义一些公用的数据，比如baseUrl、token
// import Toast from '/@vant/weapp/toast/toast';//引入vant插件，用于提示错误
const request = function (url: string, options: any) {
    return new Promise((resolve, reject) => {
        wx.request({
            url: app.globalData.baseUrl + url,
            method: options.method,
            data: options.method == "GET" ? options.data : JSON.stringify(options.data),
            // header这里根据业务情况自行选择需要还是不需要
            header: {
                'Authorization': app.globalData?.access_token || ''
            },
            success: (res: any) => {
                if (res.data.code == 200) {
                resolve(res)
                } else if (res.data.code == 401){
                    // 登录过期
                    wx.showToast({
                        title: res.data.msg,
                        icon: 'none',
                        duration: 1500
                    });
                    app.globalData.userInfo = {}
                    app.globalData.access_token = ''
                    // 跳转到登录页面
                    setTimeout(() => {
                        wx.navigateTo({
                            url: '/pages/login/login'
                        });
                    }, 1000); //延迟时间
                } else {
                    wx.showToast({
                        title: res.data.msg,
                        icon: 'none',
                        duration: 1500
                    })
                }
            },
            fail: (err) => {
                reject(err)
            }
        })
    })
}

export default {
    get(url: string, data?: any) {
        return request(url, {
            method: "GET",
            data
        })
    },
    //封装post方法
    post(url: string, data?: any) {
        return request(url, {
            method: "POST",
            data
        })
    },
    //封装del方法
    delete(url: string, data?: any) {
        return request(url, {
            method: "DELETE",
            data
        })
    },
    //封装put方法
    put(url: string, data?: any) {
        return request(url, {
            method: "PUT",
            data
        })
    }
}
